<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title></title>
	</head>
	<body>
		
	</body>
	<script type="text/javascript">
 			function Foo(){
 	        getName = function(){console.log(1);
 	         console.log(this)};
 	         console.log(this);
 	        return this; 
 		    }
 	    
 	        Foo.getName = function(){console.log(2);}; //普通函数定义
 	        /*prototype 属性使您有能力向对象添加属性和方法。*/
 	        Foo.prototype.getName = function(){console.log(3);}; //对象属性
 	        
 	        /**
 	         * 以下两种函数定义没有什么区别，一般情况下都是后面的覆盖前面的，
 	         * 如果一个是匿名函数，一个是普通函数，则可能根据浏览器不同覆盖方式不同，有的是匿名覆盖普通，有的是普通覆盖匿名
 	         */
 		    var getName = function(){console.log(4);}; 
 		    function getName(){console.log(5);} 
 	
 		  	Foo.getName(); // 2
 		    getName(); // 4
 		    Foo().getName(); // 1  Foo()返回的this指的是windows对象，全局调用的Foo函数，再调用getName()也是windows.getName()的含义
 		    new Foo().getName();//3 new Foo() 返回Foo对象，本身Foo对象的getName()方法输出1，但是后面又覆盖了此方法，所以输出3
 		    new Foo.getName();//  2
 		    
 		</script>

</html>
